package xyz.xuminghai.javafx_learn.scene.paint;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.FlowPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

/**
 * 2023/7/31 3:53 星期一<br/>
 * Color 类用于封装默认 sRGB 颜色空间中的颜色。每种颜色都有一个隐式 alpha 值 1.0 或构造函数中提供的显式 alpha 值。
 * Alpha 值定义颜色的透明度，可以用 0.0-1.0 或 0-255 范围内的双精度值表示。
 * alpha 值为 1.0 或 255 表示颜色完全不透明，alpha 值为 0 或 0.0 表示颜色完全透明。
 * 当使用显式 alpha 构造Color或获取 Color 的颜色/alpha 分量时，颜色分量永远不会与 alpha 分量预乘。
 *
 * @author xuMingHai
 */
public class ColorApp extends Application {

    private final BorderPane root = new BorderPane();

    public static void main(String[] args) {
        Application.launch(args);
    }


    @Override
    public void init() {
        FlowPane flowPane = new FlowPane(30.0, 30.0);
        flowPane.setMaxSize(300.0, 300.0);

        Rectangle rectangle1 = new Rectangle(50.0, 50.0);
        Rectangle rectangle2 = new Rectangle(50.0, 50.0);
        Rectangle rectangle3 = new Rectangle(50.0, 50.0);
        Rectangle rectangle4 = new Rectangle(50.0, 50.0);
        Rectangle rectangle5 = new Rectangle(50.0, 50.0);
        Rectangle rectangle6 = new Rectangle(50.0, 50.0);
        Rectangle rectangle7 = new Rectangle(50.0, 50.0);
        Rectangle rectangle8 = new Rectangle(50.0, 50.0);
        Rectangle rectangle9 = new Rectangle(50.0, 50.0);

        rectangle1.setFill(Color.color(1.0, 0.5, 0.5));
        rectangle2.setFill(Color.rgb(100, 20, 200));
        rectangle3.setFill(Color.gray(0.3));
        rectangle4.setFill(Color.grayRgb(150));
        // HSB是一种用于表示颜色的模型，它是根据颜色的色调（Hue）、饱和度（Saturation）、亮度（Brightness）三个属性来描述颜色的
        rectangle5.setFill(Color.hsb(200, 0.4, 0.6));
        rectangle6.setFill(Color.web("orange"));
        rectangle7.setFill(Color.web("0xff668840"));
        rectangle8.setFill(Color.web("#ff6688"));
        rectangle9.setFill(Color.web("rgb(255, 102, 136)"));

        flowPane.getChildren().addAll(rectangle1, rectangle2,
                rectangle3, rectangle4, rectangle5, rectangle6,
                rectangle7, rectangle8, rectangle9);

        root.setCenter(flowPane);
    }

    public void start(Stage primaryStage) {
        primaryStage.setTitle(getClass().getSimpleName());
        Scene scene = new Scene(root, 800, 600);
        primaryStage.setScene(scene);
        primaryStage.show();
    }


}
